// // //=============================1.初始化对象解构==================================

// // let person = {
// //     name:'sliy',
// //     age:25
// // }
// // //解构-->重命名
// // let {name:userName,age:userAge} = person;
// // console.log(userName);//sliy
// // console.log(userAge);//25
// // //解构-->直接使用相同属性名，可以使用简写语法
// // let {name,age} = person;
// // console.log(name);//sliy
// // console.log(age);//25
// // //解构-->解构赋值不一定与对象的属性匹配。赋值的时候可以忽略某些属性，而如果引用的属性不存在，则该变量的值就是 undefined：
// // let {height,color} = { height:'175cm',weight:'60kg'}
// // console.log(height);//175cm
// // console.log(color);//undefined
// // //解构-->可以在解构赋值的同时定义默认值，这适用于前面刚提到的引用的属性不存在于源对象中的情况：
// // let {id,job = 'a computer job'} = { id:'121451214'};
// // console.log(id);//121451214
// // console.log(job);//a computer job
// // //解构-->解构并不要求变量必须在解构表达式中声明。不过，如果是给事先声明的变量赋值，则赋值表达式必须包含在一对括号中：
// // let preName,preAge;
// // ({preName,preAge} = {preAge:'4545',preName:'I am a iremen'});
// // console.log();
// // //解构-->源对象不能是null/undefined 内部函数ToObject()
// // let { length } = 'abcedfg';
// // console.log( length );
// // let { constructor:c } = 4;
// // console.log((Number(4)).constructor);
// // console.log(c);
// // // let { _1 } = null;//TypeError: Cannot destructure property '_1' of 'null' as it is null.
// // // console.log(_1);
// // // let { _2 } = undefined;//TypeError: Cannot destructure property '_2' of 'undefined' as it is undefined.
// // // console.log(_2);

// let person = {
//     name:'Cotty',
//     age:25,
//     job:{
//         title:'a worker job'
//     }
// };
// let personCopy = {};
// ({
//     name: personCopy.name,
//     age: personCopy.age,
//     job: personCopy.job
// } = person);
// console.log(personCopy);//{ name: 'Cotty', age: 25, job: { title: 'a worker job' } }
// person.job.title = 'a music piano'
// console.log(person.job);//{ title: 'a music piano' }
// console.log(personCopy.job);//{ title: 'a music piano' }

// //解构赋值可以使用嵌套结构，以匹配嵌套的属性:
// let personCopy = {job:{title:''}};
// ({
//     name: personCopy.name,
//     age: personCopy.age,
//     job:{
//         title: personCopy.job.title
//     }
// } = person);
// console.log(personCopy);//{ job: { title: 'a worker job' }, name: 'Cotty', age: 25 }
// person.job.title = 'a music piano' //此时person修改，没有影响到personCopy
// console.log(person.job);//{ title: 'a music piano' }
// console.log(personCopy.job);//{ title: 'a worker job' }
// let person = {
//     job:{
//         title:'a teacher'
//     }
// };
// let personCopy = {job:{}};//{ job: { title: 'a teacher' } },此处如果不1定义job，直接报错。
// ({ 
//     job: { 
//       title: personCopy.job.title 
//     } 
// } = person);
// console.log(personCopy);

// let person = {
//     userName:'Scott',
//     userAge:25
// }
// let personName,personAge,presonBar;
// try{
//     ({userName:personName,bar:{foo:presonBar},userAge:personAge} = person)
// }catch(err){
//     console.log(err);//TypeError: Cannot read property 'foo' of undefined
// }
// console.log(personName,personAge,presonBar);//Scott undefined undefined

let person = {
    name:'Scott',
    age:25
}
function printPerson(value1,{name,age},value2){
    console.log(arguments);
    console.log(name,age);
}
function printPerson1(value1,{name:personName,age:personAge},value2){
    console.log(arguments);
    console.log(personName,personAge);
}
printPerson('list',person,'second');
printPerson1('list',person,'second');
// [Arguments] {
//     '0': 'list',
//     '1': { name: 'Scott', age: 25 },
//     '2': 'second'
//   }
//   Scott 25
// [Arguments] {
//     '0': 'list',
//     '1': { name: 'Scott', age: 25 },
//     '2': 'second'
//   }
//   Scott 25